home *** CD-ROM | disk | FTP | other *** search
/ Aminet 23 / Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso / Aminet / dev / src / CdBS_KQSrc0_3.lha / KaliosysQuantrum / AutoCrop.s next >
Text File  |  1997-11-01  |  4KB  |  193 lines

  1. *
  2. * CdBSian Obviously Universal & Interactive Nonsense (COUIN)
  3. * (Absurdité CdBSienne Manifestement Universelle et Interactive)
  4. * ©1997, CdBS Software (MORB)
  5. * Bitmap auto cropping routines
  6. * $Id: AutoCrop.s 0.4 1997/09/14 17:09:24 MORB Exp MORB $
  7. *
  8.  
  9. ;fs "_ACScanBitmap"
  10. _ACScanBitmap:     ; a0=Bitmap d0=Width d1=Height
  11.          moveq     #0,d3
  12.          move.l    d0,d2
  13.          lsr.l     #4,d2
  14.          addx.l    d3,d2
  15.          move.l    d2,-(a7)
  16.          mulu      #NbPlanes,d2
  17.          move.l    d2,d7
  18.          subq.l    #1,d2
  19.  
  20. .TopScan:
  21.          move.l    d2,d3
  22.          move.l    a0,a2
  23.  
  24. .TopScanLine:
  25.          tst.w     (a2)+
  26.          dbne      d3,.TopScanLine
  27.  
  28.          tst.w     -2(a2)
  29.          bne.s     .TopScanDone
  30.  
  31.          move.l    a2,a0
  32.          subq.l    #1,d1
  33.          beq.s     .EmptyBitmap
  34.  
  35.          bra.s     .TopScan
  36.  
  37. .TopScanDone:
  38.  
  39.          move.l    d7,d3
  40.          mulu      d1,d3
  41.          lea       (a0,d3.l*2),a2
  42.  
  43.          move.l    d7,d2
  44.          subq.l    #1,d2
  45.  
  46. .BottomScan:
  47.          move.l    d2,d3
  48.          move.l    a2,a3
  49.  
  50. .BottomScanLine:
  51.          tst.w     -(a3)
  52.          dbne      d3,.BottomScanLine
  53.  
  54.          tst.w     (a3)
  55.          bne.s     .BottomScanDone
  56.  
  57.          move.l    a3,a2
  58.          subq.l    #1,d1
  59.          bra.s     .BottomScan
  60.  
  61. .BottomScanDone:
  62.  
  63.          move.l    a0,a2
  64.          move.l    (a7)+,d2
  65.          move.l    d2,d7
  66.          add.l     d7,d7
  67.          moveq     #0,d5
  68.          moveq     #0,d6
  69.  
  70. .LeftScan:
  71.          move.l    d1,d3
  72.          mulu      #NbPlanes,d3
  73.          subq.l    #1,d3
  74.          move.l    a2,a3
  75.  
  76. .LeftScanColumn:
  77.          or.w      (a3),d5
  78.          add.l     d7,a3
  79.          dbf       d3,.LeftScanColumn
  80.  
  81.          tst.w     d5
  82.          bne.s     .LeftScanDone
  83.  
  84.          addq.l    #2,a2
  85.          subq.l    #1,d2
  86.          bra.s     .LeftScan
  87.  
  88. .LeftScanDone:
  89.  
  90.          bfffo     d5{16:16},d5
  91.          sub.l     #16,d5
  92.          move.l    a2,a0
  93.  
  94.          lea       -2(a0,d2.l*2),a2
  95.          moveq     #0,d4
  96.  
  97. .RightScan:
  98.          move.l    d1,d3
  99.          mulu      #NbPlanes,d3
  100.          subq.l    #1,d3
  101.          move.l    a2,a3
  102.          sub.l     d7,a3
  103.  
  104. .RightScanColumn:
  105.          add.l     d7,a3
  106.          or.w      (a3),d4
  107.          dbf       d3,.RightScanColumn
  108.  
  109.          tst.w     d4
  110.          bne.s     .RightScanDone
  111.  
  112.          subq.l    #2,a2
  113.          subq.l    #1,d2
  114.          bra.s     .RightScan
  115.  
  116. .RightScanDone:
  117.  
  118.          movem.l   d1-2/d5/d7/a0,_ACHeight
  119.          moveq     #-1,d0
  120.  
  121. .CountRightBits:
  122.          addq.l    #1,d0
  123.          lsr.w     #1,d4
  124.          bcc.s     .CountRightBits
  125.          move.l    d0,_ACRightBits
  126.  
  127.          moveq     #-1,d0
  128.          rts
  129.  
  130. .EmptyBitmap:
  131.          moveq     #0,d0
  132.          rts
  133. ;fe
  134. ;fs "_ACCut"
  135. _ACHeight:
  136.          ds.l      1
  137. _ACWidth:
  138.          ds.l      1
  139. _ACShift:
  140.          ds.l      1
  141. _ACTotWidth:
  142.          ds.l      1
  143. _ACBitmap:
  144.          ds.l      1
  145. _ACDestModulo:
  146.          ds.l      1
  147. _ACRightBits:
  148.          ds.l      1
  149. _ACCut:  ; a0=Dest. bitmap
  150.          movem.l   _ACHeight,d0-3/a1-2
  151.  
  152.          ;not.w     d2
  153.          ;addq.l    #1,d2
  154.          ;and.w     #$f,d2
  155.  
  156.          ;tst.b     d2
  157.          ;beq.s     .Glorpf
  158.          ;subq.l    #2,a0
  159.          ;subq.l    #2,a2
  160. .Glorpf:
  161.  
  162.          mulu      #NbPlanes,d0
  163.          subq.l    #1,d0
  164.          sub.l     d1,d3
  165.          sub.l     d1,d3
  166.          subq.l    #2,d3
  167.          subq.l    #1,d1
  168.  
  169.          moveq     #-1,d7
  170.          lsr.w     d2,d7
  171.  
  172. .YLoop:
  173.          move.l    d0,a3
  174.  
  175.          move.l    d1,d4
  176.          move.w    (a1)+,d5
  177.  
  178. .XLoop:
  179.          swap      d5
  180.          move.w    (a1)+,d5
  181.          move.l    d5,d6
  182.          lsl.l     d2,d6
  183.          swap      d6
  184.          move.w    d6,(a0)+
  185.          dbf       d4,.XLoop
  186.  
  187.          add.l     d3,a1
  188.          add.l     a2,a0
  189.          move.l    a3,d0
  190.          dbf       d0,.YLoop
  191.          rts
  192. ;fe
  193.